package hot100;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/9/15 16:39
 */
public class lc124二叉树路径的最大和 {

    /*
        跟之前的写法 有点略不一样
        下面的想法是有点的错的
     */

    int max = Integer.MIN_VALUE; // 因为 val 可能为 负数， 所以 当前最优，并不是全局最优， 所以需要 每次统计全局最优

    // 明白 递归函数的 含义表示什么意思
    public int recursion(TreeNode node) { //  f(node) 表示 ， 经过node 的序列 的最大值， 但是不能形成 闭环，意思就是说。 不能同时包含 左右子树
        if (node == null) {
            return 0;
        }
        int left = recursion(node.left);
        int right = recursion(node.right);
        int cur = node.val;
        cur += left >= 0 ? left : 0;
        cur += right >= 0 ? right : 0;

        max = Math.max(cur,max);

        return cur;
    }


    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode() {
        }

        TreeNode(int val) {
            this.val = val;
        }

        TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }
}
